Efficiency and Performance

[1]:
%matplotlib inline
import time
import pymarket as pm
import numpy as np
import matplotlib.pyplot as plt

Create a set of markets with varying number of participants

[41]:
markets = []
range_players = np.arange(20, 200, 20)
M = len(range_players)

for i in range_players:
    bids = pm.datasets.generate(i, i, 2, 1)
    mar = pm.Market()
    for b in bids:
        mar.accept_bid(*b)
    markets.append(mar)

Run the diferent markets

[42]:
elapsed = np.zeros(M)
for i in range(M):
    mar = markets[i]
    start = time.time()
    mar.run('huang')
    stop = time.time()
    elapsed[i] = stop - start
[43]:
fig, ax = plt.subplots()
ax.plot(range_players, elapsed)
_ = ax.set_xlabel('Number of Players')
_ = ax.set_ylabel('Elapsed Time (s)')
_ = ax.set_title('Performance')
_images/Efficiency_and_performance_6_0.png

Obtains the statistics (optimization problems have to be solved)

[49]:
traded = np.zeros(M)
welfare = np.zeros(M)
stats_time = np.zeros(M)

limit = M
for i in range(limit):
    mar = markets[i]
    start = time.time()
    stats = mar.statistics()
    stop = time.time()
    stats_time[i] = stop - start
    welfare[i] = stats['percentage_welfare']
    traded[i] = stats['percentage_traded']

Plots the results

[51]:
fig, ax = plt.subplots(1, 3, figsize=(18, 6))

ax[0].plot(range_players[:limit], stats_time[:limit])
ax[0].set_ylabel('Elapsed Time (s)')

ax[1].plot(range_players[:limit], welfare[:limit])
ax[1].set_ylabel(' % Total welfare')

ax[2].plot(range_players[:limit], traded[:limit])
ax[2].set_ylabel(' % Total traded')

for ax_ in ax:
    ax_.set_xlabel('Number of Players')
_images/Efficiency_and_performance_10_0.png
[ ]: